package com.dys.typeconversion;

/**
 * @className: com.dys.typeconversion.DataTypeConvert
 * @description: 基本数据类型转换
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/06/12 下午10:14
 */
public class DataTypeConvert {

    public static void main(String[] args) {
        specialCase();
    }

    /**
     * int 转 double: 自动转换
     */
    public static void intToDouble() {
        double dNumber = 6;
        System.out.println("int 类型转换为 long类型：" + dNumber);
    }

    /**
     * double 转 int (大类型转为小类型)：强制转换,会丢失精度
     */
    public static void doubleToInt() {
        // 强制转换：会损失精度
        int iNumber = (int) 6.5;
        System.out.println("double 类型转换为 int类型：" + iNumber);
    }

    /**
     * 当有多种数据类型参与运算的时候
     */
    public static void multipleOperation() {
        // 在同一个表达式中，有多个数据类型参与运算的时候，如何处理？
        // 多种数据类型参与运算时，整数、浮点数、字符类型都可以参与运算，唯独布尔类型不可以参与运算。
        // double dNumber = 10 + 12345L + 3.5f + 6.5 + 'a' + true;
        /*
         * 数据类型级别：从低到高(byte->short->char->int->long->float->double)
         * 级别用来做什么？当一个表达式中有多种数据类型的时候，要找出当前表达式中级别最高的那个数据类型，
         * 然后其余的类型都转换为级别最高的那个数据类型进行计算。
         * double dNumber = 10 + 12345L + 3.5f + 6.5 + 'a';
         *                = 10.0 + 12345.0 + 3.5 + 6.5 + 97。0
         * */
        double dNumber = 10 + 12345L + 3.5f + 6.5 + 'a';
        System.out.println(dNumber);

        /*
         * 在进行运算的时候：
         *  左=右：直接赋值
         *  左>右：自动转换
         *  左<右：强转
         * */
        int iNumber = (int) (10 + 12345L + 3.5f + 6.5 + 'a');
        System.out.println(iNumber);
    }

    /**
     * 特殊情形：对于byte、short、char类型来说，只要在他们的标数范围内，赋值的时候就不需要进行强转了，直接赋值即可
     */
    public static void specialCase() {
        byte b = 12;
        System.out.println(b);
        byte b1 = (byte) 280;
        System.out.println(b1);
    }
}
